package com.zq.solution;

/**
 * @ClassName KClosest
 * @Description
 * 973. 最接近原点的 K 个点
 *   我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。
 *   （这里，平面上两点之间的距离是欧几里德距离。）
 *   你可以按任何顺序返回答案。除了点坐标的顺序之外，答案确保是唯一的。
 * 示例 1：
 *   输入：points = [[1,3],[-2,2]], K = 1
 *   输出：[[-2,2]]
 * 解释：
 *   (1, 3) 和原点之间的距离为 sqrt(10)，
 *   (-2, 2) 和原点之间的距离为 sqrt(8)，
 *   由于 sqrt(8) < sqrt(10)，(-2, 2) 离原点更近。
 *   我们只需要距离原点最近的 K = 1 个点，所以答案就是 [[-2,2]]。
 * @Author ZQ
 * @Date 2020/11/9 14:18
 * @Version 1.0
 */
public class KClosest {
    public static int[][] kClosest(int[][] points, int K) {
        int n = points.length;
        int[] tmp = new int[n];
        int[][] result = new int[K][];
        for (int i = 0; i < n; i++){
            tmp[i] = (int) (Math.pow(points[i][0] , 2) + Math.pow(points[i][1] , 2));
        }
        for (int i = 0; i < K; i++){
            int min = i;
            for (int j = 0; j < n; j++){
                if (tmp[j] < tmp[min]) min = j;
            }
            result[i] = points[min];
            tmp[min] = Integer.MIN_VALUE;

        }
        return result;
    }

    public static void main(String[] args) {
        int[][] result = new int[][]{{-2,10},{-4,-8},{10,7},{-4,-7}};
        for (int[] i : kClosest(result,3)){
            System.out.println(i[0]+","+i[1]);
        }

    }
}
